package com.dkm.orproject.dkmoa.service.serviceimpl;

import com.dkm.orproject.dkmoa.dao.OaVoteTypeMapper;
import com.dkm.orproject.dkmoa.domain.OaVoteType;
import com.dkm.orproject.dkmoa.domain.OaWorkSummaryType;
import com.dkm.orproject.dkmoa.service.OaVoteTypeService;
import com.dkm.orproject.utils.utils.IdToobtainUtils;
import com.dkm.orproject.utils.utils.ThreeVo;
import com.dkm.orproject.utils.utils.Tools;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.util.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName : OaVoteTypeServiceImpl  //类名
 * @Description : 投票类型Service实现类  //描述
 * @Author : 易嵘  //作者
 * @Date: 2020-11-26 15:19  //时间
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class OaVoteTypeServiceImpl implements OaVoteTypeService {

    /**
     * 投票类型Mapper
     */
    @Resource
    OaVoteTypeMapper voteTypeMapper;

    /**
     * id生成工具
     */
    @Resource
    IdToobtainUtils idToobtainUtils;

    @Resource
    Tools tools;

    /**
     * 分页查询
     * @param voteTypeName 投票类型名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param page 当前页数
     * @param limit 显示行数
     * @return 查询结果
     */
    @Override
    public List<OaVoteType> findAll(String voteTypeName, String startTime, String endTime, Integer page, Integer limit) {
        PageHelper.startPage(page,limit);
        return voteTypeMapper.findAll(voteTypeName,startTime,endTime);
    }

    /**
     * 总行数
     * @param voteTypeName 投票类型名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 总行数
     */
    @Override
    public Long rowCount(String voteTypeName, String startTime, String endTime) {
        return voteTypeMapper.rowCount(voteTypeName,startTime,endTime);
    }

    /**
     * id查询
     * @param id 投票类型id
     * @return 投票类型
     */
    @Override
    public OaVoteType selectByPrimaryKey(Long id) {
        return voteTypeMapper.selectByPrimaryKey(id);
    }

    /**
     * 新增
     * @param voteType 投票类型模型
     * @param personnelName 创建人
     * @return 回调函数
     */
    @Override
    public int add(OaVoteType voteType, String personnelName) {
        voteType.setPkVoteTypeId(idToobtainUtils.getNumberId());
        voteType.setCreatedBy(personnelName);
        voteType.setIsRevision("1");
        if(ObjectUtils.isEmpty(voteType.getVoteTypeSuperId())){
            voteType.setVoteTypeSuperId(0L);
        }
        return voteTypeMapper.insertSelective(voteType);
    }

    /**
     * 条件修改
     * @param voteType 投票类型模型
     * @return 回调函数
     */
    @Override
    public int updateByPrimaryKeySelective(OaVoteType voteType) {
        return voteTypeMapper.updateByPrimaryKeySelective(voteType);
    }

    /**
     * 批量查询
     * @param list 投票类型id集合
     * @return 查询集合
     */
    @Override
    public List<OaVoteType> selectAll(List<Long> list) {
        return voteTypeMapper.selectAll(list);
    }

    /**
     * 批量删除
     * @param list 投票类型id集合
     * @return 回调函数
     */
    @Override
    public int deleteAll(List<Long> list) {
        return voteTypeMapper.deleteAll(list);
    }

    /**
     * id删除
     * @param id 投票类型id
     * @return 回调函数
     */
    @Override
    public int deleteByPrimaryKey(Long id) {
        return voteTypeMapper.deleteByPrimaryKey(id);
    }

    /**
     * 查询所有
     * @param id 投票类型id
     * @param show 查看判断关键字
     * @return 投票类型树
     */
    @Override
    public List<ThreeVo> loadVoteType(Long id, String show) {
        OaVoteType voteType = voteTypeMapper.selectByPrimaryKey(id);
        //查询所有
        List<OaVoteType> voteTypes;
        if(StringUtil.isEmpty(show)){
            voteTypes = voteTypeMapper.loadVoteType(id);
        }else{
            voteTypes = voteTypeMapper.loadVoteType(null);
        }

        //树状图模型
        List<ThreeVo> threeVos = new ArrayList<>();
        for (OaVoteType oaVoteType : voteTypes) {
            ThreeVo threeVo = new ThreeVo();
            if("1".equals(show)){
                if(voteType!=null && voteType.getVoteTypeSuperId().equals(oaVoteType.getPkVoteTypeId())){
                    //设置默认值
                    threeVo.setSelected(true);
                }
            }else if("2".equals(show)){
                if(voteType!=null && voteType.getPkVoteTypeId().equals(oaVoteType.getPkVoteTypeId())){
                    //设置默认值
                    threeVo.setSelected(true);
                }
            }
            //参数
            threeVo.setValue(oaVoteType.getPkVoteTypeId());
            //显示内容
            threeVo.setName(oaVoteType.getVoteTypeName());
            //上级id
            threeVo.setSuperId(oaVoteType.getVoteTypeSuperId());
            //加入树状图
            threeVos.add(threeVo);
        }
        return tools.createTree(threeVos);
    }
}
